import importlib.util
import os
import sys
from pathlib import Path


def dynamic_module_loader(job_name, base_directory="./jobs"):
    """
    动态加载job模块的完整实现

    Args:
        job_name: 模块名
        base_directory: 基础目录路径
    """
    # 确保目录存在
    base_path = Path(base_directory)
    if not base_path.exists():
        raise FileNotFoundError(f"目录不存在: {base_directory}")

    # 构建模块文件路径
    module_file = base_path / f"{job_name}.py"

    if not module_file.exists():
        # 尝试查找可能的匹配
        available_jobs = [f.stem for f in base_path.glob("*.py") if f.is_file() and not f.name.startswith('_')]
        raise FileNotFoundError(f"模块文件不存在: {module_file}. 可用的job: {available_jobs}")

    try:
        # 使用importlib动态加载
        spec = importlib.util.spec_from_file_location(job_name, module_file)
        if spec is None:
            raise ImportError(f"无法创建模块规范")

        module = importlib.util.module_from_spec(spec)
        sys.modules[job_name] = module
        spec.loader.exec_module(module)

        return module

    except SyntaxError as e:
        raise ImportError(f"模块语法错误: {e}")
    except Exception as e:
        raise ImportError(f"加载模块时出错: {e}")


def discover_available_jobs(directory="./jobs"):
    """发现指定目录下所有可用的job模块"""
    base_path = Path(directory)
    if not base_path.exists():
        return []

    # 获取所有.py文件（排除__init__.py）
    job_files = [f.stem for f in base_path.glob("*.py")
                 if f.is_file() and not f.name.startswith('_')]
    return job_files


# 主程序
if __name__ == "__main__":
    # 显示可用的job
    available_jobs = discover_available_jobs('./assets/20240630')
    if available_jobs:
        print(f"可用的job: {', '.join(available_jobs)}")

    job_name = input("请输入job: ").strip()

    if job_name:
        try:
            # 加载模块
            job_module = dynamic_module_loader(job_name, './assets/20240630')
            print(f"✓ 成功加载模块: {job_name}")

            print(job_module.forum_dict)
            # 检查模块中是否有预期的函数（例如run）
            if hasattr(job_module, 'run'):
                print("发现run函数，可以调用 job_module.run()")
            else:
                print("提示: 模块中没有找到run函数")

        except Exception as e:
            print(f"✗ 错误: {e}")
    else:
        print("请输入有效的job名称")